cls
$MinWidth = 120
$MinHeight = 50

try
{
    $bufferSize = $host.UI.RawUI.BufferSize

    if ($bufferSize.Width -lt $MinWidth  ) { $bufferSize.Width = $MinWidth  }
    if ($bufferSize.Height -lt $MinHeight ) { $bufferSize.Height = $MinHeight }

    $host.UI.RawUI.BufferSize = $bufferSize

    $windowSize = $host.UI.RawUI.WindowSize

    if ($windowSize.Width -lt $MinWidth  ) { $WindowSize.Width = $MinWidth  }
    if ($windowSize.Height -lt $MinHeight ) { $WindowSize.Height = $MinHeight }

    $host.UI.RawUI.WindowSize = $windowSize
}

catch 
{
}

	Write-Host
	Write-Host " #############################################################################"
	Write-Host " #                                                                           #" 
	Write-Host " #    Installation Microsoft WebServer für OpenCDR (Gebührendaten)           #"
	Write-Host " #                                                                           #"  
	Write-Host " #############################################################################"
	Write-Host
	Write-Host " Mit diesem Script wird der Windows IIS Webserver installiert" 
	Write-Host " und konfiguriert. Zusätzlich werden PHP Manager und PHP 7.1"
	Write-Host " installiert."
	Write-Host
	Write-Host " Im Webserver Verzeichnis C:\inetpub\wwwroot werden einige Webseiten und"
	Write-Host " Scripte abgelegt die für die Funktion benötigt werden."
	Write-Host 
	Write-Host " Ebenfalls wird eine kleine Datenbank (SQLite3) installiert um die Daten"
	Write-Host " aus der CDR0.txt zu speichern."
	Write-Host
	Write-Host " Weitere Informationen stehen in der Anleitung."
	Write-Host
	Write-Host "----------------------------------------------------------------------------"
	Write-Host "  1. Microsoft Webserver mit OpenCDR installieren."
	Write-Host " ---------------------------------------------------------------------------"
	Write-Host "  0. beenden."  
	Write-Host " ---------------------------------------------------------------------------"
	Write-Host
	Write-Host  -NoNewline -ForegroundColor Green " Eingabe:> "
		$answer = Read-Host
		if ($answer -eq "1")
		{
		# Anfang der Variablen
		#		
		# Computername
		$servername = $env:computername

		# Username für die WEB_GUI: NetphoneWebAdmin
		$USER = "NetphoneWebAdmin"

		# Webserver Pfad
		$webpath = "c:\inetpub\wwwroot"
		#
		# Ende Variablen
		
	#############################################
	# Beginn Setup                              #
	#############################################

	# Windows Version auslesen
	$OSVERSION = (Get-CimInstance Win32_OperatingSystem).Version
	if ($OSVERSION -like "6.1*") {$OSNAME = "Server2008"}
	if ($OSVERSION -like "6.3*") {$OSNAME = "Server2012"}

	# Prüfung ob Netphone oder Swyxit installiert ist
	$TARGETDIR = 'C:\Program Files (x86)\SwyxWare'
	$TARGETDIR1 = 'C:\Program Files (x86)\Netphone'
	
	if((Test-Path -Path $TARGETDIR ))
	{
	$VERSION = "Swyx"
   	Write-Host
	Write-Host " Server ist eine Swyxit auf Windows $OSNAME."
	Write-Host
	Sleep 1
	}
	
	elseif((Test-Path -Path $TARGETDIR1 ))
	{
	$VERSION = "T-Com"
	Write-Host
	Write-Host " Server ist eine Netphone auf Windows $OSNAME."
	Write-Host
	Sleep 1
 	}
	
	else 
	{
	Write-Host
	Write-Host -foregroundcolor red " SwyxWare bzw. Netphone Pfad nicht gefunden. Ist die Software überhaupt installiert?."
	Write-Host
	Write-Host -foregroundcolor red " Script wird beendet."
	Write-Host
	pause
	break
	}

	# Powershell Version prüfen, falls zu alt stop
	if ( $PSVersionTable.PSVersion.Major -lt 4) 
	{ 
	Write-Host
	Write-Host -ForegroundColor RED " Die installierte Powershell Version ist zu klein (Version: $($PSVersionTable.PSVersion.Major))."
	Write-Host
	Write-Host -ForegroundColor RED " Die Mindestanforderung ist Version 4!"
	Write-Host
	Write-Host " Das Programm wird beendet."
	Write-Host
	pause
	break
	}
	
	# Prüfen ob der User Adminrechte hat.
	$objIdentitaet = [System.Security.Principal.WindowsIdentity]::GetCurrent()
	$objPrincipal = New-Object System.Security.Principal.WindowsPrincipal($objIdentitaet)
 
	if(-not $objPrincipal.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)) 
	{
	Write-Host
    Write-Host -ForegroundColor red " Das Script wird nicht mit den notwendigen Rechten ausgeführt!" 
	Write-Host -ForegroundColor red " Die Installation kann nur mit Administrator Rechten erfolgen." 
	Write-Host
	Write-Host -ForegroundColor Yellow " Bitte als Administrator anmelden und das Script neu starten."
    Write-Host
	Write-Host
	pause
	break
	}
	
	# Installiert Windows IIS Webserver 
	Write-Host
	Write-Host -ForeGroundColor Green "Windows IIS Webserver Module werden geladen."
	
	import-module servermanager
	
	Write-Host
	Write-Host " Prüfe ob der IIS Webserver bereits installiert ist..."
	Write-Host
	
	$IIS_INSTALLED = Get-Service -ServiceName "W3SVC" -ErrorAction SilentlyContinue
	
	if(!$IIS_INSTALLED) 
					{ Write-Host -foregroundcolor yellow " IIS ist noch nicht installiert. Starte Installation..." 
					  Write-Host
					  Write-Host -ForeGroundColor Green " Windows IIS Webserver mit den Modulen Net-Framework, CGI und AUTH-Basic werden installiert."
					  
					  add-windowsfeature Web-Server, Web-WebServer, Web-CGI, Web-Basic-Auth, Web-Windows-Auth, Web-Mgmt-Console, Web-Mgmt-Tools, Net-Framework-Core
					  
					  Write-Host
					  Write-Host -ForeGroundColor Green " Installation Webserver beendet."
					  Write-Host
					}
		
					else 
						{ 
						Write-Host -foregroundcolor green " IIS ist bereits installiert." 
						Write-Host
						Write-Host -ForeGroundColor Green " Installiere zusätzliche Module CGI und AUTH-Basic...."
						
						add-windowsfeature Web-WebServer, Web-CGI, Web-Basic-Auth, Web-Windows-Auth, Web-Mgmt-Console, Web-Mgmt-Tools, Net-Framework-Core
						
						Write-Host
						Write-Host -ForeGroundColor Green " Installation zusätzlicher Module für Webserver beendet."
						Write-Host
					    Write-Host
					    Write-Host " Prüfe ob IIS Webserver gestartet ist..."
					    Write-Host	   
						
						if($IIS_INSTALLED.Status -eq "Running") {
																Write-Host -foregroundcolor green " IIS ist gestartet." 
																Write-Host
																}
						
						
						}

	# WebPool erzeugen
	Write-Host
	Write-Host -ForeGroundColor Green " Module für WebAdministration werden geladen."

	Import-Module WebAdministration

	# Dateien und Ordner für neue Webseite in das Webverzeichniss kopieren
	# Webordner wird estellt
	Write-Host
	Write-Host -ForeGroundColor Green " Verzeichniss $webpath erstellen falls nicht vorhanden."
	
	if(!(Test-Path "$webpath"))
	{
	New-Item $webpath -itemType directory
	}

	# In das aktuelle Verzeichniss wechseln
	cd $PSScriptRoot

	Write-Host
	Write-Host -ForeGroundColor Green "Dateien und Ordner für neue Webseite in das Webverzeichniss kopieren" 
	
	Copy-Item -Path $PSScriptRoot\Install\opencdr $webpath\opencdr -recurse -Force


	# PHP und SQL Module installieren
	cd $PSScriptRoot

	# Ordner für PHP erstellen
	Write-Host 
	Write-Host -ForeGroundColor Green "Ordner für PHP erstellen."

	New-Item "C:\Program Files\PHP\v7.1" -type directory

	# PHP ZIP in neuen Ordner extrahieren	
	Write-Host 
	Write-Host "PHP ZIP in neuen Ordner extrahieren...."
	
	$shell = new-object -com shell.application
	$zip = $shell.NameSpace(“$PSScriptRoot\Install\PHP\PHP.zip”)
	
	foreach($item in $zip.items())
	{
	$shell.Namespace(“C:\Program Files\”).copyhere($item)
	}

	# Installation Visual C++ 2015 Redistributable
	Write-Host 
	
	cd $PSScriptRoot\Install\PHP
	
	Write-Host -ForeGroundColor Green "Visual C++ 2015 Redistributable installieren...."
	
	.\vc_redist.x64.exe /passiv

	# Installation PHP Manager
	Write-Host 

	cd $PSScriptRoot\Install\PHP

	Write-Host -ForeGroundColor Green "PHP Manager installieren...."

	start-process "c:\windows\system32\msiexec.exe"  -ArgumentList "/passive /i PHPManagerForIIS-1.2.0-x64.msi"

	# PHP Einstellungen konfigurieren
	import-module WebAdministration

	# FastCGI im IIS konfigurieren
	Write-Host
	Write-Host -ForeGroundColor Green "Konfiguration der PHP Module...."

	$php = 'C:\Program Files\PHP\v7.1\php-cgi.exe'
	$phpini = 'C:\Program Files\PHP\v7.1\php.ini'
	$configPath = get-webconfiguration 'system.webServer/fastcgi/application' | where-object { $_.fullPath -eq $php }
	if (!$pool) 
	{
    add-webconfiguration 'system.webserver/fastcgi' -value @{'fullPath' = $php }
	}

	# IIS Handler Mapping für PHP Anfragen
	$handlerName = "PHP 7.1"
	$handler = get-webconfiguration 'system.webserver/handlers/add' | where-object { $_.Name -eq $handlerName }
	if (!$handler) 
	{
		add-webconfiguration 'system.webServer/handlers' -Value @{
        Name = $handlerName;
        Path = "*.php";
        Verb = "*";
        Modules = "FastCgiModule";
        scriptProcessor=$php;
        resourceType='Either' 
		}
	}

	# FastCGI Einstellungen
	# Maximale Anzahl von Anfragen für PHP setzen
	$configPath = "system.webServer/fastCgi/application[@fullPath='$php']/environmentVariables/environmentVariable"
	$config = Get-WebConfiguration $configPath
	if (!$config) 
	{
    $configPath = "system.webServer/fastCgi/application[@fullPath='$php']/environmentVariables"
    Add-WebConfiguration $configPath -Value @{ 'Name' = 'PHP_FCGI_MAX_REQUESTS'; Value = 10050 }
	Add-WebConfiguration $configPath -Value @{ 'Name' = 'PHPRC'; Value = 'C:\Program Files\PHP\v7.1' }
	}

	# Einstellungen ändern
	# Möglich Einstellunen: 
	#     instanceMaxRequests, monitorChangesTo, stderrMode, signalBeforeTerminateSeconds
	#     activityTimeout, requestTimeout, queueLength, rapidFailsPerMinute, 
	#     flushNamedPipe, protocol   
	$configPath = "system.webServer/fastCgi/application[@fullPath='$php']"
	Set-WebConfigurationProperty $configPath -Name instanceMaxRequests -Value 1000
	Set-WebConfigurationProperty $configPath -Name protocol -Value Tcp
	Set-WebConfigurationProperty $configPath -Name monitorChangesTo -Value $phpini

	# Default Dokument um .php erweitern
	$filter = "system.webserver/defaultdocument/files"
	$file = "index.php"
	if (!(Get-WebConfiguration $filter/* | where {$_.value -eq $file}).length -eq 1)
	{
	Write-Host 
	Write-Host " Setze index.php als Default Dokument..."
	Add-WebConfiguration $filter -atIndex 0 -Value @{value=$file}
	}

	# Rechte für IUSR für Ordner C:\inetpub\wwwroot ändern
	Write-Host 
	Write-Host "Rechte für den IUSR User für den opencdr anpassen..."

	icacls "C:\inetpub\wwwroot\opencdr\Sqlite3\" /grant IIS_IUSRS:F
	icacls "C:\inetpub\wwwroot\opencdr\" /grant IIS_IUSRS:RX

	if(Test-Path "C:\Programdata\$VERSION\cdr0.txt") 
	{
	icacls "C:\Programdata\$VERSION\cdr0.txt" /grant IIS_IUSRS:R
	}

	else 
	{
	Write-Host -foregroundcolor red "Eigentlich sollte im Verzeichnis C:\Programdata\$VERSION\ eine Datei cdr0.txt liegen sollen, war aber keine da!"
	}

	# Task für täglicher Datenimport anlegen
	# Wechsele in den Install Ordner
	cd $PSScriptRoot\Install

	# Betriebssystem = Windows Server 2008
	if($OSNAME -eq "Server2008") 
	{
		$a = &Schtasks.exe /query /TN "Datenbankimport OpenCDR täglich"

		if(!$a -eq "") 
		{ 
		Write-Host -ForeGroundColor Green " Job im Aufgabenplaner existiert bereits." 
		Write-Host
		}

		else 
		{
		Write-Host
		Write-Host -ForeGroundColor Green " Erzeuge Job im Aufgabenplaner für täglichen Datenimport..."
		Write-Host 
		
		SchTasks.exe /create /xml "Datenbankimport OpenCDR täglich.xml" /tn "Datenbankimport OpenCDR täglich"
		
		Write-Host	
		}
	}

	# Betriebssystem = Windows Server 2012
	if($OSNAME -eq "Server2012")
	{
	$a = &Schtasks.exe /query /TN "IppBx User Export täglich"
		if(!$a -eq "") 
		{ 
		Write-Host -ForeGroundColor Green " Job im Aufgabenplaner existiert bereits." 
		Write-Host
		}
	
		else 
		{
		Write-Host -ForeGroundColor Green " Erzeuge Job im Aufgabenplaner für täglichen Datenimport..."
		Write-Host 
	
		Register-ScheduledTask -Xml (Get-Content 'Datenbankimport OpenCDR täglich.xml' | out-string) -TaskName "Datenbankimport OpenCDR täglich"
	
		Write-Host -ForeGroundColor Green " Job im Aufgabenplaner für täglichen Datenimport wurde erzeugt."
		Write-Host 
		}
	}

	# Erster Import der cdr0.txt in die Datenbank schreiben
	Write-Host
	Write-Host -ForeGroundColor Green "  Erster Import der cdr0.txt in die Datenbank ..."

	$Command = "c:\inetpub\wwwroot\opencdr\autoimport.bat" 
	& "$Command"

	# IIS neustarten
	Write-Host 
	Write-Host -ForeGroundColor Green " IIS Server wird neu gestartet..."

	invoke-command -scriptblock {iisreset /restart }

	Write-Host
	Write-Host -ForegroundColor Yellow " Installation beendet. Der Webserver ist jetzt erreichbar unter der IP des Netphone Servers. (http://127.0.0.1/opencdr)"
	Write-Host
	Write-Host

	pause
	break
}
if ($answer -eq "0")
	{
	break
	}
 
	else 
	{
	write-host -ForegroundColor red {" Falsche Eingabe."}
	sleep 2
	}
	
	